//#include<bits/stdc++.h>
//using namespace std;
//int main()
//{
//	int n;
//	cin >> n;
//	vector<pair<int, int>> tatai(n);
//	int maxdistance = 0;
//
//	for (int i = 0; i < n; i++) {
//		cin >> tatai[i].first >> tatai[i].second;
//	}
////	int index = 0;
//	for (int i = 1 ; i < n; i++) {
//		int distances = abs(tatai[i].first  - (tatai[i - 1].first + tatai[i - 1].second));
//		if (distances > maxdistance) {
//			maxdistance = distances;
////			index = i;
//		}
//	}
//	cout << maxdistance;
//	return 0;
//}
//#include <iostream>
//#include <vector>
//#include <algorithm>
//using namespace std;
//
//bool can_communicate(vector<pair<int, int>>& towers, int v) {
//	int n = towers.size();
//	vector<int> positions(n);
//	vector<int> radii(n);
//	
//	for (int i = 0; i < n; i++) {
//		positions[i] = towers[i].first;
//		radii[i] = towers[i].second + v;
//	}
//	
//	vector<bool> reachable(n, false);
//	reachable[0] = true;
//	
//	for (int i = 1; i < n; i++) {
//		for (int j = 0; j < i; j++) {
//			if (abs(positions[i] - positions[j]) <= radii[i] || abs(positions[i] - positions[j]) <= radii[j]) {
//				if (reachable[j]) {
//					reachable[i] = true;
//					break;
//				}
//			}
//		}
//	}
//	
//	return reachable[n-1];
//}
//
//int calculate_minimum_voltage(vector<pair<int, int>>& towers) {
//	int left = 0;
//	int right = 1e9 + 1;
//	
//	while (left < right) {
//		int mid = left + (right - left) / 2;
//		if (can_communicate(towers, mid)) {
//			right = mid;
//		} else {
//			left = mid + 1;
//		}
//	}
//	
//	return left;
//}
//
//int main() {
//	int n;
//	cin >> n;
//	
//	vector<pair<int, int>> towers(n);
//	for (int i = 0; i < n; i++) {
//		int a, b;
//		cin >> a >> b;
//		towers[i] = make_pair(a, b);
//	}
//	
//	int min_voltage = calculate_minimum_voltage(towers);
//	
//	cout << min_voltage << endl;
//	
//	return 0;
//}
#include <iostream>
#include <vector>
using namespace std;

int n;
vector<int> a, b;

bool check(int x) {
	int cur = a[1] + b[1] + x;
	for (int i = 2; i < n; i++) {
		if (cur >= a[i]) {
			cur = max(cur, a[i] + b[i] + x);
		} else {
			return false;
		}
	}
	return cur >= a[n];
}

int main() {
	cin >> n;
	a.resize(n + 1);
	b.resize(n + 1);
	for (int i = 1; i <= n; i++) {
		cin >> a[i] >> b[i];
	}
	
	int ans = -1, l = 0, r = a[n] - a[1];
	while (l <= r) {
		int mid = (l + r) / 2;
		if (check(mid)) {
			r = mid - 1;
			ans = mid;
		} else {
			l = mid + 1;
		}
	}
	
	cout << ans << endl;
	
	return 0;
}
